package ca.etsmtl.log430.lab3.gestion.ifaces;

import ca.etsmtl.log430.lab3.gestion.CourseType;
import ca.etsmtl.log430.lab3.gestion.Teacher;
import ca.etsmtl.log430.lab3.gestion.TimeSlot;
import ca.etsmtl.log430.lab3.gestion.list.TeacherList;

/**
 * @author  samuel
 */
public interface ICourse {

	/**
	 * Assign a teacher to a class.
	 * 
	 * 	Modification 3: Modifier le syst�me existant de telle  sorte qu'un avertissement soit �mis lorsqu'on 
						essaie d�attribuer � un enseignant un cours ou laboratoire d�j� attribu� (pour le m�me groupe). Le syst�me 
						ne doit permettre la saisie dans  cette situation, une fois que l'utilisateur a pris connaissance de 
						l'avertissement.  
	 * 
	 * TODO ADD validation
	 * @param teacher
	 */
	public abstract boolean assignTeacher(ITeacher teacher);

	
	
	/**
	 * @uml.property  name="courseName"
	 */
	public abstract String getCourseName();

	/**
	 * @uml.property  name="courseID"
	 */
	public abstract String getCourseID();

	/**
	 * @uml.property  name="group"
	 */
	public abstract String getGroup();

	/**
	 * @uml.property  name="day"
	 */
	public abstract String getDay();

	/**
	 * @uml.property  name="startTime"
	 */
	public abstract String getStartTime();

	/**
	 * @uml.property  name="stopTime"
	 */
	public abstract String getStopTime();

	/**
	 * @uml.property  name="teachers"
	 * @uml.associationEnd  
	 */
	public abstract TeacherList getTeachers();

	/**
	 * @uml.property  name="type"
	 * @uml.associationEnd  
	 */
	public abstract CourseType getType();

	public abstract boolean isConflicting(ICourse course);

	/**
	 * @uml.property  name="courseTimeSlot"
	 * @uml.associationEnd  
	 */
	public abstract TimeSlot getCourseTimeSlot();

	/**
	 * @uml.property  name="labTimeSlot"
	 * @uml.associationEnd  
	 */
	public abstract TimeSlot getLabTimeSlot();

}